package util

import (
	"errors"
	"fmt"
	"reflect"
)

// 转换为 uint64 切片
func ToUint64Slice[T any](s []T) []uint64 {
	rs := make([]uint64, 0, len(s))
	for _, v := range s {
		if r, err := ToUint64(v); err == nil {
			rs = append(rs, r)
		}
	}
	return rs
}

// 判断变量是否为切片，并将其转换为 []any 类型
func ToAnySlice(value interface{}) ([]any, error) {
	if value == nil {
		return nil, errors.New("输入变量为nil，不能将其转换为[]any类型")
	}
	v := reflect.ValueOf(value)
	// 检查是否为切片类型
	if v.Kind() != reflect.Slice {
		return nil, fmt.Errorf("输入类型为%T不是切片，不能将其转换为[]any类型", value)
	}
	// 创建 []any 切片
	result := make([]any, v.Len())
	// 遍历原切片，逐个元素转换
	for i := 0; i < v.Len(); i++ {
		result[i] = v.Index(i).Interface()
	}
	return result, nil
}
